// CustomProxy.h
//
#ifndef CUSTOMPROXY_H
#define CUSTOMPROXY_H

#include <QTimeLine>
#include <QGraphicsProxyWidget>

namespace IDS{
namespace IDEAS{
namespace OpenGLView{

////////////////////////////////////////////////////////////////////////////////////////////////////
// @brief	Custom proxy. 
//
// @author	D.vacca
// @date	21/05/2010
////////////////////////////////////////////////////////////////////////////////////////////////////
class CustomProxy : public QGraphicsProxyWidget
{
    Q_OBJECT
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // @brief	Constructor. 
    //
    // @author	D.vacca
    // @date	21/05/2010
    //
    // @param [in,out]	parent	If non-null, the parent. 
    // @param	wFlags			The w flags. 
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    CustomProxy(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);

	
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // @brief	Destructor. 
    //
    // @author	D.vacca
    // @date	21/05/2010
    ////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual ~CustomProxy() {}


    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // @brief	Bounding rectangle. 
    //
    // @author	D.vacca
    // @date	21/05/2010
    //
    // @return	. 
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    //QRectF boundingRect() const;
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // @brief	Paint window frame. 
    //
    // @author	D.vacca
    // @date	21/05/2010
    //
    // @param [in,out]	painter	If non-null, the painter. 
    // @param	option			The option. 
    // @param [in,out]	widget	If non-null, the widget. 
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    void paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option,
                          QWidget *widget);                          

protected:
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // @brief	Hover enter event. 
    //
    // @author	D.vacca
    // @date	21/05/2010
    //
    // @param [in,out]	event	If non-null, the event. 
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    //void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // @brief	Hover leave event. 
    //
    // @author	D.vacca
    // @date	21/05/2010
    //
    // @param [in,out]	event	If non-null, the event. 
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    //void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // @brief	Scene event filter. 
    //
    // @author	D.vacca
    // @date	21/05/2010
    //
    // @param [in,out]	watched	If non-null, the watched. 
    // @param [in,out]	event	If non-null, the event. 
    //
    // @return	true if it succeeds, false if it fails. 
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    //bool sceneEventFilter(QGraphicsItem *watched, QEvent *event);
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // @brief	Item change. 
    //
    // @author	D.vacca
    // @date	21/05/2010
    //
    // @param	change	The change. 
    // @param	value	The value. 
    //
    // @return	. 
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    QVariant itemChange(GraphicsItemChange change, const QVariant &value);

	void resizeEvent(QGraphicsSceneResizeEvent *event);


private slots:
	////////////////////////////////////////////////////////////////////////////////////////////////////
    // @brief	Updates the step described by step. 
    //
    // @author	D.vacca
    // @date	21/05/2010
    //
    // @param	step	Amount to increment by. 
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    //void updateStep(qreal step);
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // @brief	State changed. 
    //
    // @author	D.vacca
    // @date	21/05/2010
    //
    // @param		The. 
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    //void stateChanged(QTimeLine::State);
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // @brief	Zoom in. 
    //
    // @author	D.vacca
    // @date	21/05/2010
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    //void zoomIn();
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // @brief	Zoom out. 
    //
    // @author	D.vacca
    // @date	21/05/2010
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    //void zoomOut();

private:
    //QTimeLine *timeLine;
   // bool popupShown;
    //QGraphicsItem *currentPopup;
};

}}}

#endif